package es1;

public class Produto
{
	public static enum TaxaIva
	{
		NORMAL, INTERMEDIA, REDUZIDA, DESCONHECIDA
	}
	
	@SuppressWarnings("serial")
	public static class InvalidTaxException extends RuntimeException
	{			
		public  InvalidTaxException(String string)
		{
			System.out.println(string);
		}
	}
	
    private int codigo;
    private String nome;
    private double custo_unitario;
    private TaxaIva iva;
    
	/***********************************************************
	* @param codigo
	* @param nome
	* @param custo_unitario  ola marta
	***********************************************************/
	public Produto(int codigo,  String nome, double custo_unitario, TaxaIva iva)
	{
		this.codigo = codigo;
		this.nome = nome;
		this.custo_unitario = custo_unitario;
		this.iva = iva;
	}
	
	/***********************************************************
	* 
	***********************************************************/
	public Produto(Produto outro)
	{
		this.codigo = outro.codigo;
		this.nome = outro.nome;
		this.custo_unitario = outro.custo_unitario;
		this.iva = outro.iva;
	}

	/***********************************************************
	 * @return the codigo
	 ***********************************************************/
	public int getCodigo()
	{
		return codigo;
	}
	
	/***********************************************************
	 * @return the nome
	 ***********************************************************/
	public String getNome()
	{
		return nome;
	}
	
	/***********************************************************
	 * @return the custo_unitario
	 ***********************************************************/
	public double getCusto_unitario()
	{
		return custo_unitario;
	}
	
	/***********************************************************
	 * @return the custo_unitario
	 ***********************************************************/
	public TaxaIva getIva()
	{
		return iva;
	}
	
	/***********************************************************
	 * @param codigo the codigo to set
	 ***********************************************************/
	public void setCodigo(int codigo)
	{
		this.codigo = codigo;
	}
	
	/***********************************************************
	 * @param nome the nome to set
	 ***********************************************************/
	public void setNome(String nome)
	{
		this.nome = nome;
	}
	
	/***********************************************************
	 * @param custo_unitario the custo_unitario to set
	 ***********************************************************/
	public void setCusto_unitario(double custo_unitario)
	{
		this.custo_unitario = custo_unitario;
	}
	
	/***********************************************************
	 * @param iva the iva to set
	 ***********************************************************/
	public void setIva(TaxaIva iva)
	{
		this.iva = iva;
	}
	
	/* (non-Javadoc)
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object outro)
	{
		Produto outro_produto = (Produto) outro;
		double epsilon = 1E-6;
		
		return
			this.codigo == outro_produto.codigo && 
			this.nome.equals(outro_produto.nome) && 
			Math.abs(this.custo_unitario - outro_produto.custo_unitario) < epsilon &&
			this.iva == outro_produto.iva;
	}
	
	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString()
	{
		return "Produto [codigo=" + codigo + ", nome=" + nome + ", custo_unitario=" + custo_unitario + ", iva=" + iva +  "]";
	}
	
	/* (non-Javadoc)
	 * @see java.lang.Object#clone()
	 */
	@Override
	protected Object clone()
	{
		return new Produto(this);
	}

}
